import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.GeneratorUntil;
import com.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

//演示例子，执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {

	public static void main(String[] args) throws SQLException {

		// 代码生成器
		AutoGenerator mpg = new AutoGenerator();
		
		mpg.setTemplateEngine(new FreemarkerTemplateEngine());
		String projectPath = GeneratorUntil.projectPath;

		// 全局配置
		mpg.setGlobalConfig(GeneratorUntil.globalConfig());

		// 数据源配置
		mpg.setDataSource(GeneratorUntil.dataSourceConfig());

		// 包配置
		mpg.setPackageInfo(GeneratorUntil.packageConfig());

		// 自定义配置
		InjectionConfig cfg = new InjectionConfig() {
			@Override
			public void initMap() {
				
			}
		};

		// 如果模板引擎是 freemarker
		String templatePath =GeneratorUntil.templatePath ;
		// 如果模板引擎是 velocity
		// String templatePath = "/templates/mapper.xml.vm";

		// 自定义输出配置
		List<FileOutConfig> focList = new ArrayList<>();
		// 自定义配置会被优先输出
		focList.add(new FileOutConfig(templatePath) {
			@Override
			public String outputFile(TableInfo tableInfo) {
				// 自定义输出文件名 ， 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化！！
				tableInfo.setConvert(false);
				return projectPath + "/src/main/resources/" + GeneratorUntil.packageConfig().getModuleName() + "/" + StringUtils.toLowerCaseFirstOne(tableInfo.getEntityName())
						+ ".vue";
			}
		});
		/*
		 * cfg.setFileCreate(new IFileCreate() {
		 * 
		 * @Override public boolean isCreate(ConfigBuilder configBuilder,
		 * FileType fileType, String filePath) { // 判断自定义文件夹是否需要创建
		 * checkDir("调用默认方法创建的目录"); return false; } });
		 */
		cfg.setFileOutConfigList(focList);
		mpg.setCfg(cfg);

		// 配置模板
		TemplateConfig templateConfig = new TemplateConfig();

		// 配置自定义输出模板
		// 指定自定义模板路径，注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
		// templateConfig.setEntity("templates/entity2.java");
		// templateConfig.setService();
		// templateConfig.setController();

		templateConfig.setEntity("templates/entity.java");
		mpg.setTemplate(templateConfig);
		// 策略配置
		mpg.setStrategy(GeneratorUntil.strategyConfig());
		mpg.execute();
	}
}
